/*
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
 * agreements. See the NOTICE file distributed with this work for additional information regarding
 * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 
 * (the "License"); you may not use this file except in compliance with the License. You may obtain 
 * a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 * 
 * =================================================================================================
 * 
 * This software consists of voluntary contributions made by many individuals on behalf of the
 * Apache Software Foundation. For more information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 * 
 * +------------------------------------------------------------------------------------------------+
 * | License: http://buession.buession.com.cn/LICENSE 												|
 * | Author: Yong.Teng <webmaster@buession.com> 													|
 * | Copyright @ 2013-2015 Buession.com Inc.														|
 * +------------------------------------------------------------------------------------------------+
 */
package com.buession.socket.utils;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

/**
 * 
 *
 * @author Yong.Teng <webmaster@buession.com>
 */
public class ByteBufToBytes {

	private ByteBuf byteBuf;

	private boolean isEnd = true;

	public ByteBufToBytes() {

	}

	public ByteBufToBytes(int length) {
		byteBuf = Unpooled.buffer(length);
	}

	public void reading(ByteBuf buf) {
		buf.readBytes(byteBuf, buf.readableBytes());
		isEnd = byteBuf.writableBytes() == 0;
	}

	public boolean isEnd() {
		return isEnd;
	}

	public byte[] readFull() {
		if (isEnd == true) {
			byte[] contentByte = new byte[byteBuf.readableBytes()];

			byteBuf.readBytes(contentByte);
			byteBuf.release();

			return contentByte;
		} else {
			return null;
		}
	}

	public byte[] read(ByteBuf buf) {
		byte[] data = new byte[buf.readableBytes()];

		buf.readBytes(data);

		return data;
	}

}